home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / MCASM.RAR / MC_ASM.EXE / WROX_ASM / CH13 / C13_3.ASM < prev    next >
Assembly Source File  |  1994-11-12  |  3KB  |  75 lines

  1. ;
  2. ; Program 13.3 Executing a Child Process via Function 4B00h
  3. ;
  4. .286
  5. dosseg
  6. .model small
  7. .stack 100h
  8. .data
  9. comm_tail  db 3,' /d', 0Dh              ; Command tail
  10. prog_name  db 'memview.exe',0
  11. ;
  12. ; EXEC parameter block
  13.            align 2
  14. Env        dw 0                         ; parent's environment
  15. comlin     dw offset comm_tail,0
  16. FCB1       dw 5ch,0                     ; 5Ch is FCB1 offset in PSP
  17. FCB2       dw 6ch,0                     ; 6Ch is FCB2 offset in PSP
  18.  
  19. ok_mess    db 'Alright!',10,13,'$'
  20. ret_val    db 0
  21. method     db 0
  22. .code
  23. Start:
  24.                 mov ax,@data
  25.                 mov ds,ax               ; Load data segment
  26.  
  27.                 mov bx,ss
  28.                 sub bx,ax
  29.                 shl bx,4
  30.                 cli
  31.                 mov ss,ax               ; Load stack pointer
  32.                 add sp,bx
  33.                 sti
  34.  
  35.                 mov bx,sp
  36.                 add bx,15               ; Round up to next paragraph
  37.                 shr bx,4
  38.                 add ax,bx               ; AX = SS + SP / 16 = segment address
  39.                                         ; of the end of the program space
  40.                 mov bx,es
  41.                 sub ax,bx               ; AX = required ammount of paragraphs
  42.                 mov bx,ax
  43.                 mov ah,4ah
  44.                 int 21h                 ; Resize program
  45.                 jc Exit                 ; Exit on error
  46.  
  47.                 mov comlin+2,ds         ; Load segment of command tail
  48.                 mov FCB1+2,es           ; Copy FCBs from parent's PSP
  49.                 mov FCB2+2,es
  50.                 mov ax,es:[2ch]         ; Load environment segment
  51.                 mov Env,ax              ; from parent's PSP
  52.  
  53.                 mov ax,4b00h
  54.                 mov dx,offset prog_name ; DS:DX points to child pathname
  55.                 mov cx,ds
  56.                 mov es,cx
  57.                 mov bx,offset Env       ; ES:BX points to EXEC parameter
  58.                                         ; block
  59.                 int 21h                 ; Run child
  60.                 jc Exit                 ; Exit on error
  61.  
  62.                 mov ah,4dh
  63.                 int 21h                 ; Get child-program return value
  64.                 mov ret_val,al          ; AL = return value
  65.                 mov method,ah           ; AH = termination method
  66.  
  67.                 mov ah,9
  68.                 mov dx,offset ok_mess
  69.                 int 21h
  70.                 xor al,al               ; Successful
  71. Exit:
  72.                 mov ah,4ch
  73.                 int 21h
  74. end Start
  75.